/*
 * @FilePath: \flutter_ducafecat_news_getx\lib\pages\musicplay\controller.dart
 * @Date: 2022-07-22 09:17:16
 * @LastEditTime: 2022-07-22 15:28:41
 * @Description: 
 */
import 'package:flutter/animation.dart';
import 'package:flutter_ducafecat_news_getx/pages/application/index.dart';
import 'package:flutter_ducafecat_news_getx/pages/musicplay/index.dart';
import 'package:get/get.dart';

///使用多个动画继承GetTickerProviderStateMixin接口
class MusicPlayController extends GetxController
    with GetTickerProviderStateMixin {
  MusicPlayController();
  final state = ApplicationState();

  /// 响应式成员变量

  /// 成员变量

  /// 事件
  ///控制动画
  void dongChange() {
    state.isPlay = !state.isPlay;
    if (state.isPlay) {
      _repeatController.repeat();
    } else {
      _repeatController.stop();
    }
  }

  ///音乐播放器旋转动画
  ///重复播放控制器
  late final AnimationController _repeatController;
  late final AnimationController _yaobiController;

  ///线性动画
  late final Animation<double> animation;

  ///摇杆
  late final Animation<double> yaobianimation;

  /// 生命周期

  ///在 widget 内存中分配后立即调用。
  ///你可以用它来为控制器初始化 initialize 一些东西。
  @override
  void onInit() {
    super.onInit();
    // new 对象
    // 初始静态数据

    _repeatController = AnimationController(
      duration: Duration(seconds: 15),
      vsync: this,
    );
    _yaobiController =
        AnimationController(vsync: this, duration: Duration(seconds: 3))
          ..repeat();
    animation = Tween<double>(begin: 0, end: 1).animate(_repeatController);
    yaobianimation =
        Tween<double>(begin: 0, end: 0.06).animate(_yaobiController);
  }

  ///在 onInit() 之后调用 1 帧。这是进入的理想场所
  ///导航事件，例如 snackbar、对话框或新route，或
  ///async 异步请求。
  @override
  void onReady() {
    super.onReady();
    // async 拉取数据
  }

  ///在 [onDelete] 方法之前调用。 [onClose] 可能用于
  ///处理控制器使用的资源。就像 closing events 一样，
  ///或在控制器销毁之前的流。
  ///或者处置可能造成一些内存泄漏的对象，
  ///像 TextEditingControllers、AnimationControllers。
  ///将一些数据保存在磁盘上也可能很有用。
  @override
  void onClose() {
    _repeatController.dispose();
    _yaobiController.dispose();
    super.onClose();
    // 1 stop & close 关闭对象
    // 2 save 持久化数据
  }

  ///dispose 释放内存
  @override
  void dispose() {
    super.dispose();
    // dispose 释放对象
  }
}
